package jdbc;

import java.sql.*;

/**
 * @author Sai
 * Created by Sai on 2019-03-25.
 * <p>
 * <p>
 * <p>
 * JDBC编程步骤：
 * 0.加载数据库驱动程序
 * 1.连接到数据库
 * 2.创建SQL或MySQL语句
 * 3.在数据库中执行SQL或MySQL查询
 * 4.查看和修改记录
 * <p>
 * H2官方教程：
 * http://www.h2database.com/html/tutorial.html
 */
@SuppressWarnings({"Duplicates", "unused", "SqlNoDataSourceInspection", "SqlDialectInspection"})
public class DBUtil {

    //  本地连接的内存模式，程序模式时，应用程序结束后，数据库就被清除。
    private static final String URL = "jdbc:h2:mem:test;MODE=MYSQL;DB_CLOSE_DELAY=-1";


    private static final String DRIVER = "org.h2.Driver";

    private static final String NAME = "sa";
    private static final String PASSWORD = "sa";

    public static void main(String[] args) {


        try (Connection conn = DriverManager.getConnection(URL, NAME, PASSWORD)) {
            /*
                注意，Connection预设为自动“认可/提交”（Commit），也就是Statement执行SQL叙述完后，马上对数据库进行操作变更.
                如果想要对Statement要执行的SQL进行除错，可以使用setAutoCommit(false)来将自动认可取消，在执行完SQL之后，再呼叫Connection的commit()方法认可变更，
                使用Connection的getAutoCommit()可以测试是否设定为自动认可。
                不过无论是否有无执行commit()方法，只要SQL没有错，在关闭Statement或Connection前，都会执行认可commit动作，对数据库进行变更。
            */

            //3.通过数据库的连接操作数据库，实现增删改查
            Statement stmt = conn.createStatement();

            // 创建一个表
            // 如果表不存在就建立这个表，那么可以直接用 create table if not exists tablename 这样的指令来建立，不需要先去查询表是否存在。
            // 从模板表创建表：create table if not exists like old_table_name;
            stmt.executeUpdate(
                    "CREATE TABLE IF NOT EXISTS `user` (" +
                            "  `id` int(11) unsigned NOT NULL AUTO_INCREMENT," +
                            "  `name` varchar(100) NOT NULL," +
                            "  `identity` varchar(100) NOT NULL," +
                            "  PRIMARY KEY (`id`)" +
                            ");"
            );
            // 插入数据记录
            // id主键是自动生成

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
